package persistencia;

import java.util.List;
import modelo.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Paciente;
import pojos.Pedido;

/**
 *
 * @author Javier
 */
public class PacientesDAO {

    private Session sesion;
    private Transaction transaccion;

    private void iniciarConexionConBBDD() {
        sesion = HibernateUtil.getSessionFactory().openSession();
        transaccion = sesion.beginTransaction();
    }

    public List<Paciente> getPacientes() {
        List<Paciente> listaPacientes;
        iniciarConexionConBBDD();
        listaPacientes = sesion.createQuery("FROM Paciente").list();
        sesion.close();

        return listaPacientes;
    }
    
    public Integer numNuevoPaciente() {
        Integer numPaciente;

        iniciarConexionConBBDD();
        numPaciente = (Integer) sesion.createQuery("SELECT MAX(codPaciente) FROM Pacinte").uniqueResult();
        sesion.close();
        return numPaciente;
    }

    public void addPaciente(Paciente paciente) {
        iniciarConexionConBBDD();
        sesion.save(paciente);
        transaccion.commit();
        sesion.close();

    }

    public List<Integer> getCodigosPacientes() {
        List<Integer> listaDeCodigos;
        iniciarConexionConBBDD();
        listaDeCodigos = sesion.createQuery("SELECT codPaciente FROM Paciente").list();
        sesion.close();

        return listaDeCodigos;
    }

    public List<Paciente> getPacientePorCodYDni(Integer codPedido, String dni) {
        List<Paciente> paciente;
        iniciarConexionConBBDD();
        paciente = sesion.createQuery("FROM Paciente WHERE codPaciente=" + codPedido + " AND DNI='" + dni+"'").list();
        sesion.close();

        return paciente;
    }

    public List<Paciente> getPacienteporCodigo(Integer codPaciente) {
        List<Paciente> paciente;
        iniciarConexionConBBDD();
        paciente = sesion.createQuery("FROM Paciente WHERE codPaciente=" + codPaciente).list();
        sesion.close();

        return paciente;
    }

    public List<Paciente> getPacientesPordni(String dni) {
        List<Paciente> paciente;
        iniciarConexionConBBDD();
        paciente = sesion.createQuery("FROM Paciente WHERE DNI='" + dni+"'").list();
        sesion.close();

        return paciente;
    }
    
    
    public Paciente getPaciente(String dni) {
        Paciente paciente;
        iniciarConexionConBBDD();
        paciente = (Paciente) sesion.createQuery("FROM Paciente WHERE DNI=" + dni).uniqueResult();
        sesion.close();
        return paciente;
    }
    
    public Paciente getPaciente(Integer cod) {
        Paciente paciente = null;
        iniciarConexionConBBDD();
        paciente = (Paciente) sesion.createQuery("FROM Paciente WHERE codPaciente=" + cod).uniqueResult();
        sesion.close();
        return paciente;
    }
    
     public void eliminarPaciente(Paciente pacienteEliminar)
    {
        iniciarConexionConBBDD();
        sesion.delete(pacienteEliminar);
        transaccion.commit();
        sesion.close();
        
    }
    
   
    
    public void actualizarPaciente(Paciente pacienteModificar)
    {
        iniciarConexionConBBDD();
        sesion.update(pacienteModificar);
        transaccion.commit();
        sesion.close();
    }
    
}
